package semantico;

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.TreeMap;

public class Contexto {
	
	private HashMap hRotulos;
	private HashMap hVariaveis;
	private HashMap hRegistros;
	private HashMap hFuncoes;
	private HashMap hProcedimentos;
	private HashMap hConstantes;
	
	private LinkedList lRotulosUtilizados;
	private TreeMap tRotulosImplantados;
	
	public Contexto()
	{
		hRotulos = new HashMap();
		hVariaveis = new HashMap();
		hRegistros = new HashMap();
		hFuncoes = new HashMap();
		hProcedimentos = new HashMap();
		hConstantes = new HashMap();
		
		lRotulosUtilizados = new LinkedList();
		tRotulosImplantados = new TreeMap();
	}

	public HashMap getHConstantes() {
		return hConstantes;
	}

	public HashMap getHFuncoes() {
		return hFuncoes;
	}

	public HashMap getHVariaveis() {
		return hVariaveis;
	}

	public HashMap getHProcedimentos() {
		return hProcedimentos;
	}

	public HashMap getHRegistros() {
		return hRegistros;
	}

	public HashMap getHRotulos() {
		return hRotulos;
	}
	
	public void adicionaParametrosContexto(LinkedList list) {
		Parametro p;
		Variavel v;
		for(int i = 0; i < list.size(); i++){
			p = (Parametro)list.get(i);
			v = new Variavel(p.getSVariavel(),p.getSTipo());
			//hVariaveis.put(v,p);
			hVariaveis.put(p.getSVariavel(), v);
		}
		
	}

	public LinkedList getLRotulosUtilizados() {
		return lRotulosUtilizados;
	}

	public TreeMap getTRotulosImplantados() {
		return tRotulosImplantados;
	}
	
	public Integer verificaRotulos(){
		
		for(int i = 0; i < lRotulosUtilizados.size(); i++){
			int numero = (Integer)lRotulosUtilizados.get(i);
			if( !tRotulosImplantados.containsValue(numero) ){
				return numero;
			}
		}
		return null;
		
	}

}
